package com.shujia.scala

import scala.actors.Actor

object Demo23Actor {
  def main(args: Array[String]): Unit = {

    /**
      * scala  自带的多线程 actor
      *
      */

    //启动actor

    val master = new Master()

    master.start()

    /**
      * 线程通信
      *
      */
    println("main --->  masater")

    //发送消息给线程 可以发送任何类型的消息
    master.!("消息")

    master ! 10


    /**
      * 一个 ！ 异步发送消息  不需要返回结果
      * 两个  ！！  同步发送消息  需要返回结果   返回一个函数  需要执行才能得到结果
      */

    val fun = master !! Message(404, "网页找不到")

    //获取收到的消息
    val result = fun()
    println(result)


  }


}

case class Message(code: Int, msg: String)

class Master extends Actor {

  //相当于run 方法
  override def act(): Unit = {

    while (true) {
      //接收消息
      receive {
        case s: String => println("接收到的消息：" + s)
        case a: Int => println("int类型的消息:" + a)

        //接收同步消息
        case msg: Message => {
          println("接收到的消息：" + msg)

          //回一个消息
          sender ! "消息已收到"
        }
      }
    }
  }
}

